package com.ys.otms.listener;

import com.aliyun.mns.model.Message;
import com.aliyuncs.exceptions.ClientException;
import com.google.gson.Gson;
import com.ys.otms.dao.IHuoYuanDao;
import com.ys.otms.utils.ali.DefaultAlicomMessagePuller;
import com.ys.otms.utils.ali.MessageListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;


public class ReceiveAliMsgListener implements ApplicationListener<ContextRefreshedEvent> {

	@Autowired
	private IHuoYuanDao iHuoYuanDao;

	class MyMessageListener implements MessageListener {
		private Gson gson=new Gson();
		@Override
		public boolean dealMessage(Message message) {

			//消息的几个关键值
			System.out.println("message handle: " + message.getReceiptHandle());
			System.out.println("message body: " + message.getMessageBodyAsString());
			System.out.println("message id: " + message.getMessageId());
			System.out.println("message dequeue count:" + message.getDequeueCount());

			try{
				Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
				String phoneNumber=(String)contentMap.get("phone_number");
				String content=(String)contentMap.get("content");
				String signName=(String)contentMap.get("sign_name");
				String sendTime=(String)contentMap.get("send_time");
				String destCode=(String)contentMap.get("dest_code");
				String sequenceId=(String)contentMap.get("sequence_id");
				System.out.println(phoneNumber);
				System.out.println(content);
				System.out.println(signName);
				System.out.println(sendTime);
				System.out.println(destCode);
				System.out.println(sequenceId);
				//看了api，应该拿不到我们项目里面的特定的唯一字段比如id字段来进行修改，所以用手机号来进行判断，
                // 但是表中可能有多个相同手机号，所以就要取最新的一条，然后更新数据，0说明有意向，其它的说明没有意向
                if ("0".equals(content)) {
                    //说明有意向
					//手机号找到船主（可以在表中加一个船主字段）
//					iHuoYuanDao
                }

			}catch(com.google.gson.JsonSyntaxException e){
				//理论上不会出现格式错误的情况，所以遇见格式错误的消息，只能先delete,否则重新推送也会一直报错
				return true;
			} catch (Throwable e) {
				//您自己的代码部分导致的异常，应该return false,这样消息不会被delete掉，而会根据策略进行重推
				return false;
			}

			//消息处理成功，返回true, SDK将调用MNS的delete方法将消息从队列中删除掉
			return true;
		}

	}

	public void onApplicationEvent(ContextRefreshedEvent event) {
	    System.out.println("onApplicationEvent ：" + event);
		DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();

		String accessKeyId="LTAIiYEI0efCu7bj";
		String accessKeySecret="qz01IaaL7dm3G1cBu2m6RApctq1JLN";


//		 *云通信产品下所有的回执消息类型:
//		 *1:短信回执：SmsReport，
//		 *2:短息上行：SmsUp
//		 *3:语音呼叫：VoiceReport
//		 *4:流量直冲：FlowReport

		//此处应该替换成相应产品的消息类型
		String messageType="SmsUp";
		//在云通信页面开通相应业务消息后，就能在页面上获得对应的queueName,每一个消息类型
		String queueName="Alicom-Queue-1947672197440636-SmsUp";
		try {
			puller.startReceiveMsg(accessKeyId,accessKeySecret, messageType, queueName, new MyMessageListener());
		} catch (ClientException e) {
			e.printStackTrace();
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}
